package sh.grapendaal.tsuushin.module.uno.engine;

import sh.grapendaal.tsuushin.module.uno.engine.service.AchievementService;
import sh.grapendaal.tsuushin.module.uno.engine.service.CardService;
import sh.grapendaal.tsuushin.module.uno.engine.service.PersistenceService;
import sh.grapendaal.tsuushin.module.uno.engine.service.PlayerService;

public interface UnoEngine {
	/**
	 * These states indicate the state of the engine. Idle means that nothing is
	 * going on, and that a new game can be started. Pending means that it's
	 * waiting for action, mostly waiting for players to join. Finally, playing
	 * means that a game is in progress.
	 */
	public enum State {
		IDLE, PENDING, INITIALIZING, PLAYING
	}

	State getState();

	Input getInput();

	Output getOutput();
	
	CardService getCardService();

	PlayerService getPlayerService();

	AchievementService getAchievementService();

	PersistenceService getPersistenceService();
}